package com.example.metadatatest.Factories;

import com.example.metadatatest.MetaConfig.AppConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * TomcatConfiguration
 *
 *  返回tomcat工厂，用于ioc启动
 *
 * @blame 吴经纶
 */
@Configuration
public class TomcatConfiguration {
    @Value("${wjl.auto.port}")
    private  int port;

  /**
   刷新上下文之前  parse 解析了 spring.factory 并转为{@Class BeanDefinition} 存到registry中  然而 实例化是在finish阶段执行的
    所以在ioc 初始化tomcat容器的时候 不能使用注解注入{@link AppConfig}中的port值

   对于 回调器方法 loadBeanDefinitionsFromImportedResources(configClass.getImportedResources());
   {@link com.example.metadatatest.MagicLoad.MagicLoadSelector}

    如果要提前实例化bean呢？
   通过类 implements ImportBeanDefinitionRegistrar 自定义提前实例化bean的方法
   对于 回调器方法 	loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars());
   */



    @SuppressWarnings("JavadocReference")
    @Bean
    public TomcatServletWebServerFactory servletContainerFactory() {
        // 使用带参的构造函数实例化TomcatServletWebServerFactory，可以自定义tomcat容器的ContextPath和port。
        //return new TomcatServletWebServerFactory(ContextPath, port);
        return new TomcatServletWebServerFactory(port);
    }
}
